#ifndef __display_H
#define	__display_H


#include "stm32f10x.h"

// commands
#define LCD_CLEARDISPLAY 0x01
#define LCD_RETURNHOME 0x02
#define LCD_ENTRYMODESET 0x04
#define LCD_DISPLAYCONTROL 0x08
#define LCD_CURSORSHIFT 0x10
#define LCD_FUNCTIONSET 0x20
#define LCD_SETCGRAMADDR 0x40
#define LCD_SETDDRAMADDR 0x80

// flags for display entry mode
#define LCD_ENTRYRIGHT 0x00
#define LCD_ENTRYLEFT 0x02
#define LCD_ENTRYSHIFTINCREMENT 0x01
#define LCD_ENTRYSHIFTDECREMENT 0x00

// flags for display on/off control
#define LCD_DISPLAYON 0x04
#define LCD_DISPLAYOFF 0x00
#define LCD_CURSORON 0x02
#define LCD_CURSOROFF 0x00
#define LCD_BLINKON 0x01
#define LCD_BLINKOFF 0x00

// flags for display/cursor shift
#define LCD_DISPLAYMOVE 0x08
#define LCD_CURSORMOVE 0x00
#define LCD_MOVERIGHT 0x04
#define LCD_MOVELEFT 0x00

// flags for function set
#define LCD_8BITMODE 0x10
#define LCD_4BITMODE 0x00
#define LCD_2LINE 0x08
#define LCD_1LINE 0x00
#define LCD_5x10DOTS 0x04
#define LCD_5x8DOTS 0x00

// flags for backlight control
#define LCD_BACKLIGHT 0x08
#define LCD_NOBACKLIGHT 0x00

#define En B00000100  // Enable bit
#define Rw B00000010  // Read/Write bit
#define Rs B00000001  // Register select bit


 void  LiquidCrystal_I2C(u8 lcd_Addr,u8 lcd_cols,u8 lcd_rows);
  void begin(u8 cols, u8 rows, u8 charsize  );
  void clear();
  void home();
  void noDisplay();
  void display();
  void noBlink();
  void blink();
  void noCursor();
  void cursor();
  void scrollDisplayLeft();
  void scrollDisplayRight();
  void printLeft();
  void printRight();
  void leftToRight();
  void rightToLeft();
  void shiftIncrement();
  void shiftDecrement();
  void noBacklight();
  void backlight();
  void autoscroll();
  void noAutoscroll(); 
  void createChar(u8, u8[]);
  void setCursor(u8, u8); 
#if defined(ARDUINO) && ARDUINO >= 100
   size_t write(u8);
#else
   void write(u8);
#endif
  void command(u8);
  void init();

////compatibility API function aliases
void blink_on();						// alias for blink()
void blink_off();       					// alias for noBlink()
void cursor_on();      	 					// alias for cursor()
void cursor_off();      					// alias for noCursor()
void setBacklight(u8 new_val);				// alias for backlight() and nobacklight()
void load_custom_character(u8 char_num, u8 *rows);	// alias for createChar()
void printstr(const char[]);

////Unsupported API functions (not implemented in this library)
u8 status();
void setContrast(u8 new_val);
u8 keypad();
void setDelay(int,int);
void on();
void off();
u8 init_bargraph(u8 graphtype);
void draw_horizontal_graph(u8 row, u8 column, u8 len,  u8 pixel_col_end);
void draw_vertical_graph(u8 row, u8 column, u8 len,  u8 pixel_col_end);
	 

  void init_priv();
  void send(u8, u8);
  void write4bits(u8);
  void expanderWrite(u8);
  void pulseEnable(u8);
  u8 _Addr;
  u8 _displayfunction;
  u8 _displaycontrol;
  u8 _displaymode;
  u8 _numlines;
  u8 _cols;
  u8 _rows;
  u8 _backlightval;



#endif /* __ADC_H */

